package com.atguigu.principle.demeter;

import java.util.ArrayList;
import java.util.List;

/**
 * @program: design-patterns
 * @author: yangshen
 * @description: 学校的管理类
 *  分析：
 *      SchoolManager 类的直接朋友类（成员变量，方法参数，方法返回值）有哪些 Employee、CollegeManager
 *      CollegeEmployee（printAllEmployee方法的局部变量） 不是 直接朋友 而是一个陌生类，这样违背了 迪米特法则
 * @create: 2022-01-12 22:46
 **/
public class SchoolMange {
    /**
     * 获取学校总部的员工
     * @return
     */
    public List<Employee> getAllEmployee(){
        ArrayList<Employee> list = new ArrayList<Employee>();
        for (int i = 1; i <= 5; i++) {
            Employee employee = new Employee();
            employee.setId("学校总部员工id = " + i);
            list.add(employee);
        }
        return list;
    }

    /**
     *输出学校总部和学院的员工
     * @param collegeManage 学院的管理类
     */
    public void printAllEmployee(CollegeManage collegeManage){
        //获取学校总部的员工
        List<Employee> employeeList = this.getAllEmployee();
        System.out.println("--------------------学校总部的员工------------------");
        for (Employee employee : employeeList) {
            System.out.println(employee.getId());
        }


        //todo 分析问题
        //1. 这里的 CollegeEmployee 不是  SchoolManager的直接朋友
        //2. CollegeEmployee 是以局部变量方式出现在 SchoolManager
        //3. 违反了 迪米特法则(应该出现的方式： 成员变量，方法参数，方法返回值)

        //获取学院的员工
        List<CollegeEmployee> collegeEmployeeList = collegeManage.getAllEmployee();
        System.out.println("-------------------学院的员工-------------------------------");
        for (CollegeEmployee collegeEmployee : collegeEmployeeList) {
            System.out.println(collegeEmployee.getId());
        }
    }
}
